home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
CUGUK
/
PROG_TOO
/
C027B.ZIP
/
JAS
/
PASS.C
< prev
next >
Wrap
Text File
|
1990-03-30
|
2KB
|
97 lines
/*
* Copyright (c) 1988 by Sozobon, Limited. Author: Joseph M Treat
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to redistribute it freely, with the
* following restrictions:
* 1) No charge may be made other than reasonable charges for reproduction.
* 2) Modified versions must be clearly marked as such.
* 3) The authors are not responsible for any harmful consequences
* of using this software, even if they result from defects in it.
*/
#include "jas.h"
#define SCTALIGN 2
long dottxt = 0L, dotdat = 0L, dotbss = 0L, newdot = 0L;
long uptxt, updat, upbss, txtsize, datsize, bsssize;
SYM dot;
aspass1()
{
extern jmp_buf err_buf;
extern Optimize;
dot.flags = TXT;
dot.value = newdot = 0L;
yyinit();
if ( yyparse() ) {
longjmp( err_buf, 1 );
}
chsegmt(TXT);
if ( Optimize )
do_opt();
txtsize = dottxt;
if ( uptxt = txtsize % SCTALIGN )
txtsize += (uptxt = SCTALIGN - uptxt);
datsize = dotdat;
if ( updat = datsize % SCTALIGN )
datsize += (updat = SCTALIGN - updat);
bsssize = dotbss;
if ( upbss = bsssize % SCTALIGN )
bsssize += (upbss = SCTALIGN - upbss);
/* don't adjust the segments ...
fixsymval( 0L, txtsize, DAT );
fixsymval( 0L, txtsize + datsize, BSS );
... */
bufhead();
symindex();
headers();
dot.value = newdot = 0L;
translate( TXT, (int) uptxt );
translate( DAT, (int) updat );
dumpsym();
dumprel();
}
chsegmt( segment )
unsigned short segment;
{
switch ( dot.flags & SEGMT ) {
case TXT:
dottxt = newdot;
break;
case DAT:
dotdat = newdot;
break;
case BSS:
dotbss = newdot;
break;
}
switch ( segment & SEGMT ) {
case TXT:
newdot = dottxt;
break;
case DAT:
newdot = dotdat;
break;
case BSS:
newdot = dotbss;
break;
}
dot.flags = segment;
dot.value = newdot;
}